/**
 * PanelComite.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.presentacion;

import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import adsec.entidades.Comite;
import adsec.entidades.Estado;
import adsec.entidades.Permiso;
import adsec.entidades.Docente;
import adsec.negocios.AdministradorSeguridad;
import adsec.negocios.ControladoraComite;
import adsec.negocios.UtilidadesCapaNegocios;
import org.jdesktop.application.Action;

/*NOTA:
 *VOY A NECESITAR UN PROC ALMACENADO DE DOCENTE PARA OBTENER LA LISTA DE PROFESORES QUE NO ESTE EN LA LISTA
 * DE PROFESORES EN EL COMITE, PARA CUANDO ESTOY CONSULTANDO.
 */
public class PanelComite extends javax.swing.JPanel implements ListSelectionListener {

    private AdministradorSeguridad admSeguridad;
    private ControladoraComite controladoraComite;
    private Permiso permisoComite;
    private Estado estado;
    private LinkedList<Docente> docentes;
    private LinkedList<Docente> docentesEnComite;
    private LinkedList<Comite> comitesConsultados;

    /** Creates new form PanelNivelSeccion */
    public PanelComite() {
        initComponents();
        this.iniciarPanelComite();
    }

    public void valueChanged(ListSelectionEvent e) {
        int filas = ((DefaultTableModel)this.gridComite.getModel()).getRowCount();
        if(filas > 0 && (estado.getEstadoActual() == Estado.CONSULTAR) && e.getValueIsAdjusting()){
            int fila = this.gridComite.getSelectedRow();
            if(fila >= 0){
                int idComite = comitesConsultados.get(fila).getIdComite();
                this.consultarDatosComite(idComite);
            }
        }
    }

    private void iniciarPanelComite(){
        docentes = new LinkedList<Docente>();
        docentesEnComite = new LinkedList<Docente>();
        comitesConsultados = new LinkedList<Comite>();
        this.admSeguridad = AdministradorSeguridad.getInstancia();
        this.controladoraComite = new ControladoraComite();
        this.permisoComite= this.admSeguridad.getPermiso(UtilidadesCapaNegocios.moduloComite);
        this.estado = new Estado();
        this.limpiarCampos();
        this.setHabilitarCampos(false);
        this.habilitarBotonesIME(this.permisoComite.isInsertar(), false, false);
        //this.habilitarBotonesIME(true, false, false);
        this.cargarGridComite();
        this.habilitarAceptarCancelar(false);
    }

    /*
     *Recibe un boolean para habilitar todos los campos de la pantalla o ya se
     * deshabilitarlos
     */
    private void setHabilitarCampos(boolean habilitar){
        this.txtNombre.setEditable(habilitar);
        this.txtDescripcion.setEditable(habilitar);
        this.btnAgregarUno.setEnabled(habilitar);
        this.btnAgregarTodos.setEnabled(habilitar);
        this.btnRemoverUno.setEnabled(habilitar);
        this.btnRemoverTodos.setEnabled(habilitar);
        this.listProfesores.setEnabled(habilitar);
        this.listProfesoresComite.setEnabled(habilitar);
    }

    /*
     * Habilita o deshabilita los botones insertar, modificar y eliminar
     */
    private void habilitarBotonesIME(boolean insertar, boolean modificar, boolean eliminar){
        this.btnInsertar.setEnabled(insertar);
        this.btnModificar.setEnabled(modificar);
        this.btnEliminar.setEnabled(eliminar);
    }

    private void habilitarAceptarCancelar(boolean habilitar){
        this.btnAceptar.setEnabled(habilitar);
        this.btnCancelar.setEnabled(habilitar);
    }

    private void limpiarCampos(){
        this.txtNombre.setText("");
        this.txtDescripcion.setText("");
        this.limpiarListaDocentesComite();
        this.limpiarListaDocentes();
    }

    private void limpiarListaDocentesComite(){
        ((DefaultListModel)listProfesoresComite.getModel()).clear();
        this.docentesEnComite.clear();
    }

    private void limpiarListaDocentes(){
        ((DefaultListModel)listProfesores.getModel()).clear();
        this.docentes.clear();
    }

    private void cargarTodosDocentes(){
        this.limpiarListaDocentes();
        this.docentes = this.controladoraComite.consultarDocentes();
        Iterator<Docente> iterador = this.docentes.iterator();
        while(iterador.hasNext()){
            Docente docente = iterador.next();
            String profesor = docente.getApellidos() + " " + docente.getNombre();
            ((DefaultListModel)listProfesores.getModel()).addElement(profesor);
        }
    }

    private void cargarDocentesComite(int idComite){
        this.limpiarListaDocentesComite();
        this.docentesEnComite = this.controladoraComite.consultarDocentesComite(idComite);
        Iterator<Docente> iterador = this.docentesEnComite.iterator();
        while(iterador.hasNext()){
            Docente docente = iterador.next();
            String profesor = docente.getApellidos() + " " + docente.getNombre();
            ((DefaultListModel)listProfesoresComite.getModel()).addElement(profesor);
        }
    }

    private void cargarDocentesNoComite(int idComite){
        this.limpiarListaDocentes();
        this.docentes = this.controladoraComite.consultarDocentesNoComite(idComite);
        Iterator<Docente> iterador = this.docentes.iterator();
        while(iterador.hasNext()){
            Docente docente = iterador.next();
            String profesor = docente.getApellidos() + " " + docente.getNombre();
            ((DefaultListModel)listProfesores.getModel()).addElement(profesor);
        }
    }

    private Comite obtenerDatosComite(){
        Comite comite = new Comite();
        comite.setNombre(txtNombre.getText());
        comite.setDescripcion(txtDescripcion.getText());
        return comite;
    }

    /*
     * Método Insertar Comite
     */
    private void insertarComite(){
        Comite comite = obtenerDatosComite();
        if(!UtilidadesCapaNegocios.existeLlave(Comite.nombreTabla, Comite.nombreNC, comite.getNombre())){
            int resultado = this.controladoraComite.insertarComite(comite, docentesEnComite);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridComite.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "El comite fue insertado exitosamente");
                this.volverConsultar();
            }else{
                String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloComite, UtilidadesCapaNegocios.opInsertar);
                JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
            }
        }else{
            JOptionPane.showMessageDialog(null, "El comité con el nombre " + comite.getNombre() + " ya existe", "ERROR", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void modificarComite(){
        int fila = this.gridComite.getSelectedRow();
        if(fila >=0){
            Comite comite = obtenerDatosComite();
            comite.setIdComite(this.comitesConsultados.get(fila).getIdComite());
            int resultado = this.controladoraComite.modificarComite(comite,docentesEnComite);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridComite.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "El comite fue modificado exitosamente");
                this.volverConsultar();
            }else{
                String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloComite, UtilidadesCapaNegocios.opModificar);
                JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    private void eliminarComite(){
        int fila = this.gridComite.getSelectedRow();
        if(fila >=0){
            int idComite = this.comitesConsultados.get(fila).getIdComite();
            int resultado = this.controladoraComite.eliminarComite(idComite);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridComite.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "El comite fue eliminado exitosamente");
                this.volverConsultar();
                this.limpiarCampos();
            }else{
                String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloComite, UtilidadesCapaNegocios.opEliminar);
                JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    private void volverConsultar(){
        this.estado.setEstadoActual(Estado.CONSULTAR);
        //this.habilitarBotonesIME(true, false, false);
        this.habilitarBotonesIME(permisoComite.isInsertar(), false, false);
        this.setHabilitarCampos(false);
        this.habilitarAceptarCancelar(false);
        this.cargarGridComite();
    }

     private void consultarDatosComite(int id_comite){
        Comite comite = controladoraComite.consultarComite(id_comite);
        if(comite != null){
            this.txtNombre.setText(comite.getNombre());
            this.txtDescripcion.setText(comite.getDescripcion());
            this.cargarDocentesNoComite(id_comite);
            this.cargarDocentesComite(id_comite);
            this.habilitarBotonesIME(permisoComite.isInsertar(), permisoComite.isModificar(), permisoComite.isEliminar());
            //aun falta consultar la lista de profesores que estan en el comite
        }else{
            String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloComite, UtilidadesCapaNegocios.opConsultar);
            JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
        }
     }

    private void cargarGridComite(){
        this.limpiarGridComite();
        this.comitesConsultados = controladoraComite.consultarComites();
        Iterator<Comite> iterador = comitesConsultados.iterator();
        while(iterador.hasNext()){
            Comite comite = iterador.next();
            Object arregloDatos[] = new Object[3];
            arregloDatos[0] = comite.getNombre();
            arregloDatos[1] = comite.getDescripcion();
            ((DefaultTableModel)this.gridComite.getModel()).addRow(arregloDatos);
        }
    }

    private void limpiarGridComite(){
        this.comitesConsultados.clear();
        ((DefaultTableModel)this.gridComite.getModel()).setRowCount(0);
    }

    /**
     ** Muestra un mensaje de confirmación para que el usuario decida si realmente
     ** quiere llevar a cabo una operación
     ** @param operacion Código de operación realizada, tomada de UtilidadesCapaNegocios
     ** @param titulo Título a mostrar en el cuadro de confirmación
     ** @return Confirmación: true si el usuario acepta, false en otro caso.
     **/
    private boolean mostrarMensajeConfirmacion(int operacion,String titulo){
        boolean resultado = true;
        String mensaje = UtilidadesCapaNegocios.getMensajeConfirmacion(UtilidadesCapaNegocios.moduloComite, operacion);
        int respuesta = JOptionPane.showConfirmDialog(null, mensaje,titulo ,JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
        resultado = respuesta == JOptionPane.OK_OPTION;
        return resultado;
    }//fin de mostrarMensajeConfirmacion

    private boolean verificarDatosObligatorios(){
        boolean resultado = true;
        resultado &= !txtNombre.getText().trim().isEmpty();
        if(!resultado){
            JOptionPane.showMessageDialog(null, "El nombre del cómite es obligatorio", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }

    private boolean validarDatos(){
        boolean resultado = true;
        resultado &= !txtNombre.getText().trim().isEmpty();
        if(!resultado){
            JOptionPane.showMessageDialog(null, "El nombre no puede estar vacio", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }
    
    @Action
    public void insertandoComite() {
        this.estado.setEstadoActual(Estado.INSERTAR);
        this.limpiarCampos();
        this.cargarTodosDocentes();
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
    }

    @Action
    public void modificandoComite() {
        this.estado.setEstadoActual(Estado.MODIFICAR);
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
    }


    @Action
    public void eliminandoComite() {
        Animador.animar();
        if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opEliminar, "ELIMINAR")){
            this.eliminarComite();
        }
        Animador.detenerAnimacion();
    }

    @Action
    public void accionAceptar() {
        Animador.animar();
        switch(estado.getEstadoActual()){
            case Estado.INSERTAR:
                if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opInsertar, "INSERTAR")){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.insertarComite();
                    }
                }
            break;
            case Estado.MODIFICAR:
                if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opModificar, "MODIFICAR")){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.modificarComite();
                    }
                }
            break;
        }
        Animador.detenerAnimacion();
    }

    @Action
    public void accionCancelar() {
        this.limpiarCampos();
        this.volverConsultar();
    }

    @Action
    public void agregarProfesorAlComite() {
        if(!this.listProfesores.isSelectionEmpty()){
            int[] indices = this.listProfesores.getSelectedIndices();
            if(indices.length > 0){
                for(int i = indices.length - 1; i>= 0; i--){
                    Docente docente = docentes.get(indices[i]);
                    String profesor = docente.getApellidos() + " " + docente.getNombre();
                    docentesEnComite.add(docente);
                    ((DefaultListModel)listProfesoresComite.getModel()).addElement(profesor);
                    docentes.remove(indices[i]);
                    ((DefaultListModel)listProfesores.getModel()).remove(indices[i]);
                }
            }
        }
    }

    @Action
    public void sacarProfesorComite() {
        if(!this.listProfesoresComite.isSelectionEmpty()){
            int[] indices = this.listProfesoresComite.getSelectedIndices();
            if(indices.length > 0){
                for(int i = indices.length - 1; i>= 0; i--){
                    Docente docente = docentesEnComite.get(indices[i]);
                    String profesor = docente.getApellidos() + " " + docente.getNombre();
                    docentes.add(docente);
                    ((DefaultListModel)listProfesores.getModel()).addElement(profesor);
                    docentesEnComite.remove(indices[i]);
                    ((DefaultListModel)listProfesoresComite.getModel()).remove(indices[i]);
                }
            }
        }
    }
    
    @Action
    public void agregarTodosProfesoresAlComite() {
        Iterator<Docente> iterador = docentes.iterator();
        while(iterador.hasNext()){
            Docente docente = iterador.next();
            String profesor = docente.getApellidos() + " " + docente.getNombre();
            docentesEnComite.add(docente);
            ((DefaultListModel)listProfesoresComite.getModel()).addElement(profesor);
            iterador.remove();
            ((DefaultListModel)listProfesores.getModel()).removeElement(profesor);
        }
    }

    @Action
    public void sacarTodosProfesoresComite() {
        Iterator<Docente> iterador = docentesEnComite.iterator();
        while(iterador.hasNext()){
            Docente docente = iterador.next();
            String profesor = docente.getApellidos() + " " + docente.getNombre();
            docentes.add(docente);
            ((DefaultListModel)listProfesores.getModel()).addElement(profesor);
            iterador.remove();
            ((DefaultListModel)listProfesoresComite.getModel()).removeElement(profesor);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnCancelar = new javax.swing.JButton();
        btnAceptar = new javax.swing.JButton();
        lbNombre = new javax.swing.JLabel();
        btnModificar = new javax.swing.JButton();
        btnInsertar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        txtNombre = new javax.swing.JTextField();
        lbDescripcion = new javax.swing.JLabel();
        scrollDescripcion = new javax.swing.JScrollPane();
        txtDescripcion = new javax.swing.JTextPane();
        scrollListaProfesores = new javax.swing.JScrollPane();
        listProfesores = new javax.swing.JList(new DefaultListModel());
        btnAgregarUno = new javax.swing.JButton();
        btnRemoverUno = new javax.swing.JButton();
        btnAgregarTodos = new javax.swing.JButton();
        btnRemoverTodos = new javax.swing.JButton();
        scrollProfesoresComite = new javax.swing.JScrollPane();
        listProfesoresComite = new javax.swing.JList(new DefaultListModel());
        scrollGridComite = new javax.swing.JScrollPane();
        gridComite = new javax.swing.JTable();

        setName("Form"); // NOI18N
        setPreferredSize(new java.awt.Dimension(660, 582));

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getActionMap(PanelComite.class, this);
        btnCancelar.setAction(actionMap.get("accionCancelar")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getResourceMap(PanelComite.class);
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N

        btnAceptar.setAction(actionMap.get("accionAceptar")); // NOI18N
        btnAceptar.setText(resourceMap.getString("btnAceptar.text")); // NOI18N
        btnAceptar.setName("btnAceptar"); // NOI18N

        lbNombre.setText(resourceMap.getString("lbNombre.text")); // NOI18N
        lbNombre.setName("lbNombre"); // NOI18N

        btnModificar.setAction(actionMap.get("modificandoComite")); // NOI18N
        btnModificar.setText(resourceMap.getString("btnModificar.text")); // NOI18N
        btnModificar.setName("btnModificar"); // NOI18N

        btnInsertar.setAction(actionMap.get("insertandoComite")); // NOI18N
        btnInsertar.setText(resourceMap.getString("btnInsertar.text")); // NOI18N
        btnInsertar.setName("btnInsertar"); // NOI18N

        btnEliminar.setAction(actionMap.get("eliminandoComite")); // NOI18N
        btnEliminar.setText(resourceMap.getString("btnEliminar.text")); // NOI18N
        btnEliminar.setName("btnEliminar"); // NOI18N

        txtNombre.setText(resourceMap.getString("txtNombre.text")); // NOI18N
        txtNombre.setName("txtNombre"); // NOI18N

        lbDescripcion.setText(resourceMap.getString("lbDescripcion.text")); // NOI18N
        lbDescripcion.setName("lbDescripcion"); // NOI18N

        scrollDescripcion.setName("scrollDescripcion"); // NOI18N

        txtDescripcion.setName("txtDescripcion"); // NOI18N
        scrollDescripcion.setViewportView(txtDescripcion);

        scrollListaProfesores.setName("scrollListaProfesores"); // NOI18N

        listProfesores.setName("listProfesores"); // NOI18N
        scrollListaProfesores.setViewportView(listProfesores);

        btnAgregarUno.setAction(actionMap.get("agregarProfesorAlComite")); // NOI18N
        btnAgregarUno.setText(resourceMap.getString("btnAgregarUno.text")); // NOI18N
        btnAgregarUno.setName("btnAgregarUno"); // NOI18N

        btnRemoverUno.setAction(actionMap.get("sacarProfesorComite")); // NOI18N
        btnRemoverUno.setText(resourceMap.getString("btnRemoverUno.text")); // NOI18N
        btnRemoverUno.setName("btnRemoverUno"); // NOI18N

        btnAgregarTodos.setAction(actionMap.get("agregarTodosProfesoresAlComite")); // NOI18N
        btnAgregarTodos.setText(resourceMap.getString("btnAgregarTodos.text")); // NOI18N
        btnAgregarTodos.setName("btnAgregarTodos"); // NOI18N

        btnRemoverTodos.setAction(actionMap.get("sacarTodosProfesoresComite")); // NOI18N
        btnRemoverTodos.setText(resourceMap.getString("btnRemoverTodos.text")); // NOI18N
        btnRemoverTodos.setName("btnRemoverTodos"); // NOI18N

        scrollProfesoresComite.setName("scrollProfesoresComite"); // NOI18N

        listProfesoresComite.setName("listProfesoresComite"); // NOI18N
        scrollProfesoresComite.setViewportView(listProfesoresComite);

        scrollGridComite.setName("scrollGridComite"); // NOI18N

        gridComite.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nombre", "Descripción"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        gridComite.setName("gridComite"); // NOI18N
        scrollGridComite.setViewportView(gridComite);
        this.gridComite.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        this.gridComite.getSelectionModel().addListSelectionListener(this);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lbNombre, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lbDescripcion, javax.swing.GroupLayout.Alignment.TRAILING))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(scrollDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 325, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
                        .addComponent(btnModificar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnEliminar)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnInsertar)
                        .addGap(213, 213, 213))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnAceptar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnCancelar)
                        .addGap(12, 12, 12))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(scrollListaProfesores, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(btnAgregarUno, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnRemoverUno, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnAgregarTodos, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnRemoverTodos, javax.swing.GroupLayout.Alignment.LEADING))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(scrollProfesoresComite, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(86, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(scrollGridComite, javax.swing.GroupLayout.DEFAULT_SIZE, 636, Short.MAX_VALUE)
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEliminar)
                    .addComponent(btnModificar)
                    .addComponent(btnInsertar))
                .addGap(21, 21, 21)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbNombre))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(scrollDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbDescripcion))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(scrollProfesoresComite, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnAgregarUno)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnRemoverUno)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnAgregarTodos)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnRemoverTodos))
                    .addComponent(scrollListaProfesores, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(scrollGridComite, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancelar)
                    .addComponent(btnAceptar))
                .addGap(36, 36, 36))
        );
    }// </editor-fold>//GEN-END:initComponents



    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnAgregarTodos;
    private javax.swing.JButton btnAgregarUno;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnRemoverTodos;
    private javax.swing.JButton btnRemoverUno;
    private javax.swing.JTable gridComite;
    private javax.swing.JLabel lbDescripcion;
    private javax.swing.JLabel lbNombre;
    private javax.swing.JList listProfesores;
    private javax.swing.JList listProfesoresComite;
    private javax.swing.JScrollPane scrollDescripcion;
    private javax.swing.JScrollPane scrollGridComite;
    private javax.swing.JScrollPane scrollListaProfesores;
    private javax.swing.JScrollPane scrollProfesoresComite;
    private javax.swing.JTextPane txtDescripcion;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

}
